using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyAnimations : MonoBehaviour
{
    private Animator _animator; // 敌人动画控制组件
    private Enemy _enemy; // 敌人组件
    private EnemyHealth _enemyHealth; // 敌人组件

    private void Start()
    {
        _animator = GetComponent<Animator>(); // 获取敌人动画控制组件
        _enemy = GetComponent<Enemy>(); // 获取敌人组件
        _enemyHealth = GetComponent<EnemyHealth>();
    }

    // 播放受伤动画
    private void PlayHurtAnimation()
    {
        _animator.SetTrigger("Hurt"); // 设置触发器播放受伤动画
    }

    // 播放死亡动画
    private void PlayDieAnimation()
    {
        _animator.SetTrigger("Die"); // 设置触发器播放死亡动画
    }

    private IEnumerator PlayDead()
    {
        _enemy.StopMovement();
        // PlayDieAnimation();
        yield return new WaitForSeconds(GetCurrentAnimationLength());
        _enemy.ResumeMovement();
        _enemyHealth.ResetHealth();
        ObjectPooler.ReturnToPool(_enemy.gameObject);
    }

    private float GetCurrentAnimationLength()
    {
        if (_animator != null)
        {
            //使用_animator.GetCurrentAnimatorClipInfo(0)来获取当前层上正在播放的动画片段信息
            return _animator.GetCurrentAnimatorClipInfo(0).Length;
        }
        return 0f;
    }


    // 播放受伤动画的协程
    private IEnumerator PlayHurt()
    {
        _enemy.StopMovement(); // 停止敌人移动
        PlayHurtAnimation(); // 播放受伤动画
        yield return new WaitForSeconds(GetCurrentAnimationLength()); // 等待当前动画长度
        _enemy.ResumeMovement(); // 恢复敌人移动
    }

    // 敌人被击中的事件处理方法
    private void EnemyHit(Enemy enemy)
    {
        if (_enemy == enemy)
        {
            StartCoroutine(PlayHurt()); // 开始播放受伤动画的协程
        }
    }

    private void EnemyDead(Enemy enemy)
    {
        if (_enemy == enemy)
        {
            StartCoroutine(PlayDead());
        }
    }

    private void OnEnable()
    {
        EnemyHealth.OnEnemyHit += EnemyHit; // 注册敌人被击中的事件监听
        EnemyHealth.OnEnemyKilled += EnemyDead;
    }

    private void OnDisable()
    {
        EnemyHealth.OnEnemyHit -= EnemyHit; // 取消敌人被击中的事件监听
        EnemyHealth.OnEnemyKilled -= EnemyDead;
    }
}
